package com.hardy.leetcode;

import java.util.ArrayList;

/**
 * User: Ruijie Date: 2016/8/24
 */
public class PascalsTriangle {

    public static ArrayList<Integer> getRow(int rowIndex) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (rowIndex == 0) {
            result.add(1);
            return result;
        }
        if (rowIndex == 1) {
            result.add(1);
            result.add(1);
            return result;
        }
        int[][] temp=new int[rowIndex+1][rowIndex+1];
        for(int i=0;i<rowIndex+1;i++){
            temp[i][i]=1;
            temp[i][0]=1;
            for(int j=1;j<i;j++){
                temp[i][j]=temp[i-1][j-1]+temp[i-1][j];
            }
        }
        for(int i=0;i<rowIndex+1;i++){
            result.add(temp[rowIndex][i]);
        }
        return result;
    }

    public static void main(String[] args) {
        ArrayList<Integer> result=getRow1(1);
        for(Integer res:result){
            System.out.print(res+" ");
        }
    }
    public static ArrayList<Integer> getRow1(int numRows){
        if(numRows<0){
            return null;
        }
        ArrayList<Integer> result=new ArrayList<Integer>();
        if(numRows==0){
            result.add(1);
            return result;
        }
        result.add(1);
        for(int i=1;i<=numRows;i++){
            result=getNextRow(result);
        }
        return result;
    }

    private static ArrayList<Integer> getNextRow(ArrayList<Integer> list) {
        ArrayList<Integer> result=new ArrayList<Integer>();
        result.add(1);
        for(int i=0;i<list.size()-1;i++){
            result.add(list.get(i)+list.get(i+1));
        }
        result.add(1);
        return result;
    }

    public static ArrayList<ArrayList<Integer>> generate(int numRows){
        if(numRows<0){
            return null;
        }
        ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> next=new ArrayList<Integer>();
        if(numRows==0){
            next.add(1);
            result.add(next);
            return result;
        }
        next.add(1);
        result.add(next);
        for(int i=1;i<=numRows;i++){
            next=getNextRow(next);
            result.add(next);
        }
        return result;
    }
}
